#ifndef LOCKFILE_H_
#define LOCKFILE_H_

#include <unistd.h>
#include <fcntl.h>
#include <string>

typedef enum {
	lock_escritura,
	lock_lectura
} tipo_lock;

class LockFile {

private:

	struct flock fl;
	int fd;
	std::string nombre;

public:

	/*
	 * nombre: del archivo a lockear
	 * sobreescribir: setear en true para truncar el archivo si existe
	 * 				  setear en false para mantener el contenido actual del archivo
	 */
	LockFile ( const char* nombre, bool sobreescribir = false );
	virtual ~LockFile();

	int tomarLock (tipo_lock tipo);
	int liberarLock ();

	int append ( const char* buffer, int buffsize );
	int leer ( char* buffer, int buffsize );
	int escribir (const char* buffer, int buffsize);
	size_t seek( size_t pos);
	size_t size();

	bool is_open();
	void abrir();
	void cerrar();

	int getFileDescriptor();


};

#endif /* LOCKFILE_H_ */
